package com.huawei.zyb.taskManager.domain.task.valueobject;

import java.util.Set;

/**
 * 任务状态枚举值对象
 * 定义任务状态流转规则
 */
public enum TaskStatus {
    TODO("待办"),
    IN_PROGRESS("进行中"),
    PAUSED("暂停"),
    COMPLETED("已完成"),
    CANCELLED("已取消");

    private final String description;

    TaskStatus(String description) {
        this.description = description;
    }

    public String getDescription() {
        return description;
    }

    /**
     * 检查是否可以从当前状态转换到目标状态
     * 状态流转规则：
     * - 待办 → 进行中
     * - 进行中 → 暂停
     * - 暂停 → 进行中
     * - 进行中 → 已完成
     * - 进行中 → 已取消
     * - 待办 → 已取消
     */
    public boolean canTransitionTo(TaskStatus targetStatus) {
        if (this == targetStatus) {
            return false; // 不能转换到相同状态
        }

        return switch (this) {
            case TODO -> Set.of(IN_PROGRESS, CANCELLED).contains(targetStatus);
            case IN_PROGRESS -> Set.of(PAUSED, COMPLETED, CANCELLED).contains(targetStatus);
            case PAUSED -> targetStatus == IN_PROGRESS;
            case COMPLETED, CANCELLED -> false; // 终态，不能再转换
        };
    }

    /**
     * 检查是否为终态
     */
    public boolean isFinalState() {
        return this == COMPLETED || this == CANCELLED;
    }

    /**
     * 获取状态对应的进度约束
     */
    public boolean isValidProgress(int progress) {
        return switch (this) {
            case TODO -> progress == 0;
            case COMPLETED -> progress == 100;
            case IN_PROGRESS, PAUSED, CANCELLED -> progress >= 0 && progress <= 100;
        };
    }
}